启用专有编解码器


预构建的 NW.js 二进制文件中支持的编解码器

由于 NW.js 基于 Chromium,因此媒体组件本质上是相同的。在预构建的 NW.js 中,支持以下编解码器

- theora
- vorbis
- vp8 & vp9
- pcm_u8, pcm_s16le, pcm_s24le, pcm_f32le, pcm_s16be & pcm_s24be
- mp3 (v0.22.1+)

以及这些解复用器

- ogg
- matroska
- wav

在 NW.js 中启用专有编解码器

许可证和专利费

使用 H.264 编解码器需要您注意专利使用费和源代码的许可证。如果您不了解许可限制和在应用程序中使用专利媒体格式,请咨询律师。有关源代码许可证的更多信息,请查看 此处.

警告

如果您 **没有** 许可证,使用以下提示或转向其他解决方案 **不会** 使您有资格重新分发编解码器。

从社区获取 FFmpeg 二进制文件

在 Chromium 项目的最新版本中,FFmpeg 已更改为内置。因此,您无法再从官方 Chrome 发行版中获取 FFmpeg DLL。但是,您可以从社区获取 预编译的二进制文件。另一种选择是按照以下说明自己构建 FFmpeg。

在不构建 NW.js 的情况下构建 FFmpeg DLL

如果您使用的是预构建的 NW.js,您只需重建 FFmpeg DLL 并替换预构建二进制文件中的捆绑 DLL。与构建整个 NW.js (~20G) 相比,这将节省大量下载时间 (~1G)。

步骤 1. 从 GitHub 下载定制 Chromium 的 zip 包。您可以在 https://github.com/nwjs/chromium.src/tags 中找到相应的版本。将 zip 包解压缩到本地文件夹,例如 ~/nw。解压缩后的包将包含一个子目录。因此源文件夹位于 ~/nw/<子目录名称> 中。

步骤 2. 获取依赖项

由于您没有构建整个 NW.js,因此您必须手动获取以下依赖项。

  • 使用与 DEPS 文件中相同的提交,使用 Git 克隆以下文件夹
    • buildtools
    • tools/gyp
    • third_party/yasm/sources/patched-yasm
    • third_party/ffmpeg
  • 通过以下方式下载 buildtools/<os> 中的 gn 工具
    download_from_google_storage --no_resume \
                                 --platform=<platform> \
                                 --no_auth \
                                 --bucket chromium-gn \
                                 -s buildtools/<os>/<gn-exe>.sha1
    
    • <平台>: Windows 为 win32;Mac 为 darwin;Linux 为 linux*
    • <os>: Windows 为 win;Mac 为 mac;Linux 为 linux64
    • <gn-exe>: Windows 为 gn.exe;Mac 和 Linux 为 gn
  • [Mac 和 Linux] 通过以下方式下载 third_party/llvm-build 中的 clang 工具
    python tools/clang/scripts/update.py --if-needed
    
  • [Linux] 通过以下方式下载 build/linux/*-sysroot 中的库
    python build/linux/sysroot_scripts/install-sysroot.py --running-as-hook
    
  • [Mac] 通过以下方式下载 third_party/libc++-static 中的 libc++-static
    download_from_google_storage --no_resume \
                                 --platform=darwin \
                                 --no_auth \
                                 --bucket chromium-libcpp \
                                 -s third_party/libc++-static/libc++.a.sha1
    

针对 Linux 开发人员

在继续执行以下说明之前,请在首次构建 FFmpeg DLL 或 NW.js 时运行 build/install-build-deps.sh。您只需要运行一次。此脚本将自动为您安装构建依赖项。

步骤 3. 替换 BUILD.gn

将源代码根目录中的 BUILD.gn 替换为以下内容

action("dummy") {
  deps = [
    "//third_party/ffmpeg"
  ]
  script = "dummy"
  outputs = ["$target_gen_dir/dummy.txt"]
}

步骤 4. 使用 GN 工具生成 Ninja 文件

cd path/to/nw/source/folder
gn gen //out/nw \
 --args='is_debug=false is_component_ffmpeg=true target_cpu="<target_cpu>" is_official_build=true ffmpeg_branding="Chrome"'

注意: <目标 CPU> 应设置为 32 位或 64 位构建的 x86x64

步骤 4. 构建 ffmpeg DLL

ninja -C out/nw ffmpeg

您将在 out/nw 文件夹中找到 DLL。路径和文件名因平台而异

  • Windows: ffmpeg.dll
  • Mac OS X: libffmpeg.dylib
  • Linux: lib/libffmpeg.so

步骤 5. 将预构建 NW.js 中的捆绑 DLL 替换为您刚刚构建的 DLL。路径和文件名因平台而异

  • Windows: ffmpeg.dll
  • Mac OS X: nwjs.app/Contents/Versions/<chromium-版本>/nwjs Framework.framework/libffmpeg.dylib
  • Linux lib/libffmpeg.so

使用专有编解码器构建整个 NW.js

如果您不使用官方预构建的 NW.js,您可以通过以下说明构建启用专有编解码器的整个 NW.js。有关每个步骤的详细信息,请参阅 构建 NW.js

步骤 1. 安装先决条件并获取 NW.js 的源代码。请参阅 构建 NW.js 中的先决条件获取代码部分。

步骤 2. 在配置 GN 时将 ffmpeg_branding 设置为 Chrome

步骤 3. 重新生成 ninja 文件。

步骤 4. 重新构建 NW.js。